home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 429_01 / chess12 / main.cpp < prev    next >
C/C++ Source or Header  |  1994-03-30  |  2KB  |  94 lines

  1. #include <stdlib.h>
  2. #include <string.h>
  3.  
  4. #include "chess.hpp"
  5. #include "player.hpp"
  6. #include "uplayer.hpp"
  7. #include "cplayer.hpp"
  8. #include "chessui.hpp"
  9.  
  10. void OutOfMemory(void)
  11.   {
  12.     ChessUI.outOfMemory();
  13.     exit(1);
  14.   }
  15.  
  16. // define a player based on a command line parameter.  player
  17. // is allocated on heap.
  18. LOCAL PLAYER *defPlayer(PIECECOLOR color, char *arg)
  19.   {
  20.     BOOL computer = TRUE;
  21.     int lookAhead;
  22.     PLAYER *player;
  23.  
  24.     if (stricmp(arg, "u") == 0)
  25.       computer = FALSE;
  26.     else if (stricmp(arg, "c1") == 0)
  27.       lookAhead = 2;
  28.     else if (stricmp(arg, "c2") == 0)
  29.       lookAhead = 3;
  30.     else if (stricmp(arg, "c3") == 0)
  31.       lookAhead = 4;
  32.     else
  33.       exit(1);
  34.  
  35.     if (computer)
  36.       player = new COMPUTERPLAYER(color, lookAhead);
  37.     else
  38.       player = new USERPLAYER(color);
  39.  
  40.     if (!player)
  41.       OutOfMemory();
  42.  
  43.     return(player);
  44.   }
  45.  
  46.  
  47. // define the two players based on command line arguments (or
  48. // defaults)
  49. LOCAL void setupPlayers
  50.   (
  51.     int nArg,
  52.     char **arg,
  53.     PLAYER *&whitePlayer,
  54.     PLAYER *&blackPlayer
  55.   )
  56.   {
  57.     char *white = "u", *black = "c2";
  58.  
  59.     if (nArg > 1)
  60.       white = arg[1];
  61.     if (nArg > 2)
  62.       black = arg[2];
  63.     if (nArg > 3)
  64.       exit(1);
  65.  
  66.     whitePlayer = defPlayer(WHITE, white);
  67.     blackPlayer = defPlayer(BLACK, black);
  68.  
  69.     return;
  70.   }
  71.  
  72. int main(int nArg, char **arg)
  73.   {
  74.     BOARD board;
  75.     PLAYER *whitePlayer, *blackPlayer;
  76.  
  77.     setupPlayers(nArg, arg, whitePlayer, blackPlayer);
  78.  
  79.     ChessUI.init(board);
  80.  
  81.     for ( ; ; )
  82.       {
  83.     if (whitePlayer->play(board) == GAMEOVER)
  84.       break;
  85.     if (blackPlayer->play(board) == GAMEOVER)
  86.       break;
  87.       }
  88.  
  89.     delete whitePlayer;
  90.     delete blackPlayer;
  91.  
  92.     return(0);
  93.   }
  94.